﻿using System;

namespace LAPI.Business.Acciones
{
    /// <summary>
    /// Clase para realizar la acción: Obtener las reservas para el servicio
    /// </summary>
    public class AccGetReservas
    {
        /// <summary>
        /// Logger de la clase
        /// </summary>
        private LAPI.Core.Logging.ILogger logger;

        /// <summary>
        /// Constructor
        /// </summary>
        public AccGetReservas()
        {
            logger = LAPI.Core.Logging.LoggerFactory.CreateLogger(type: typeof(AccGetReservas));
        }

        /// <summary>
        /// El método realiza las siguientes funciones:
        /// <ul>
        /// <li>Obtiene un listado de las reservas que corresponden a una pista
        /// </ul>
        /// </summary>
        /// <param name="idPista">Identificador único de la pista</param>
        /// <param name="idCentro">Identificador único del centro deportivo</param>
        /// <param name="idDeporte">Identificador único del deporte</param>
        /// <returns>Una colección del modelo con todas las reservas</returns>
        /// <seealso cref="Reserva"/>
        /// <seealso cref="GestorReservas"/>
        public System.Collections.Generic.List<LAPI.Data.Model.Reserva> GetReservas(Int32 idPista, Int32 idCentro, Int32 idDeporte)
        {
            logger.Debug("[GetReservas] Comienzo");

            System.Collections.Generic.List<LAPI.Data.Model.Reserva> result = new System.Collections.Generic.List<Data.Model.Reserva>();
            try
            {
                Gestores.GestorReservas oGestor = new Gestores.GestorReservas();
                result = oGestor.ObtenerReservas(idPista: idPista, idDeporte: idDeporte, idCentro: idCentro);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
            logger.Debug("[GetReservas] Fin");

            return result;
        }

        /// <summary>
        /// El método realiza las siguientes funciones:
        /// <ul>
        /// <li>Calcula el importe de una reserva
        /// </ul>
        /// </summary>
        /// <param name="idPista">Identificador único de la pista</param>
        /// <param name="idCentro">Identificador único del centro deportivo</param>
        /// <param name="idDeporte">Identificador único del deporte</param>
        /// <returns>Una colección con los distintos precios de la reserva</returns>
        /// <seealso cref="GestorReservas"/>
        public System.Collections.Hashtable GetImporteReserva(Int32 idPista, Int32 idCentro, Int32 idDeporte)
        {
            logger.Debug("[GetImporteReserva] Comienzo");

            System.Collections.Hashtable result = new System.Collections.Hashtable();
            try
            {
                Gestores.GestorReservas oGestor = new Gestores.GestorReservas();
                result = oGestor.ObtenerPrecio(idPista: idPista, idDeporte: idDeporte, idCentro: idCentro);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
            logger.Debug("[GetImporteReserva] Fin");

            return result;
        }
    }
}
